package com.liming;

import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("张三");
        names.add("李四");
        names.add("王五");
        names.add("赵六");
        names.add("田七");
        names.add("周八");
        names.add("吴九");
        names.add("张无忌");
        names.add("张博文");
        List<String> list = new ArrayList<>();
        names.forEach(name -> {
            if(name.startsWith("张")){
                list.add(name);
            }
        });
        List<String> list1 = new ArrayList<>();
        names.forEach(name -> {
            if(name.length()==3){
                list1.add(name);
            }
        });
        list1.forEach(System.out::println);
        System.out.println("-------------------");
        //获取集合的流Stream对象
        names.stream()
                .filter(s -> s.startsWith("张"))
                .filter(s -> s.length()==3)
                .forEach(System.out::println);
        System.out.println("-------------------");


    }
    @Test
    public  void test1(){
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);
        List <Integer> list1 = list.stream().filter(Integer -> Integer % 2 == 0).toList();
        System.out.println(list1);
    }
    public void test2() {
        List<String> list = new ArrayList<>();
        list.add("肖博文，20");
        list.add("萧炎，21");
        list.add("唐三，22");
        list.add("小舞，23");
        list.add("荒天帝，24");
        //过滤年龄大于等于24的学生
        Map<Object, Object> map = list.stream().filter(s -> {
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age >= 24;
        }).collect(Collectors.toMap(s -> {
            String[] split = s.split(",");
            return split[0];
        }, s -> {
            String[] split = s.split(",");
            return split[1];
        }));

        map.forEach((key, value) -> {
            System.out.println(key + " : " + value);
        });
    }
        @Test
        //流的合并
        public void test3(){
            List<String> list1 = new ArrayList<>();
            list1.add("肖博文");
            list1.add("萧炎");
            list1.add("唐三");
            list1.add("荒天帝");
            List<String> list2 = new ArrayList<>();
            list2.add("小舞");
            list2.add("美杜莎");
            list2.add("刘亦菲");
            list2.add("杨幂");
            list2.add("杨紫");

            Stream<String> stream1 = list1.stream().filter(new Predicate<String>() {
                @Override
                public boolean test(String s) {
                    return s.length()==3;
                }
            }).limit(2);

            Stream<String> stream2 = list2.stream().filter(new Predicate<String>() {
                @Override
                public boolean test(String s) {
                    return s.startsWith("杨");
                }
            }).skip(1);
            //合并流
            Stream.concat(stream1,stream2).forEach(System.out::println);
        }
    }
